package com.leyou.job.task;

import com.leyou.job.lock.impl.RedisLockImpl1;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Slf4j
//@Component
public class CleanOrderJob1 {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 定时应该是20分钟执行一次，现在演示，就是10秒
     */
    @Scheduled(fixedDelay = 10000)
    public void cleanOrder(){
        // 1、实例化一把锁
        RedisLockImpl1 lock = new RedisLockImpl1(redisTemplate, "lock");
        // 2、尝试获取锁： 占用锁 50秒，避免死锁
        boolean isLock = lock.lock(30);
        // 3、判断
        if(!isLock){
            // 获取锁失败
            log.warn("【定时清理订单】获取清理订单的锁失败。。。。。。。");
            return;
        }
        // 4、下面的代码就是成功获取锁的代码
        try{
            log.info("【定时清理订单】成功获取锁，并且清理订单中");
            // =================================
            //======== 执行清理订单业务 ============
            //==================================
            Thread.sleep(5000);

        }catch (Exception e){
            log.error("【定时清理订单】出现异常：{}", e.getMessage());
        }finally {
            // 释放锁
            log.info("【定时清理订单】清理完成超时未支付订单，并且释放分布式锁");
            lock.unlock();
        }

    }

}
